
// import Vue from "vue";

import axios from "axios";

import router from 'vue-router'

import { Base64 } from "js-base64";

import Message_Box from '../ku-library/Message'

let instance = axios.create({
    // 响应类型
    responseType: 'json',
    // 超时时间 单位是ms，这里设置了3s的超时时间
    timeout: 10000 * 3,
    //配置请求头
    headers: {
        // 'content-type': 'application/x-www-from-urlencoded'
        'content-type': 'application/json'
    }
})

// 加密token
function base() {
    const token = localStorage.getItem("token")
    const base64 = Base64.encode(token + ':')
    return 'Basic '+ base64 // 要加空格
}


// HTTP request 请求拦截器 请求发出之前的操作  请求是否携带token
instance.interceptors.request.use(
    config => {
        let token = localStorage.getItem("token")
        if (token) {
            //  confirm.params = {'token':token} //如果要求携带在参数中
            // confirm.headers.token= token; //如果要求携带在请求头中
            // console.log(base(), 'token');
            config.headers.Authorization = base()

        }
        return config
    }, error => {
        Promise.reject(error)
    }
)

// 响应拦截器：请求之后发出的操作  
instance.interceptors.response.use(
    //接收到响应数据并成功后的一些共有的处理，关闭loading等
    response => {
        console.log(response, 'response-38');
        // if (response.status === 200) {
        //     return Promise.resolve(response);
        // } else {
        //     console.log(response,'67890-');
        //     return Promise.reject(response);
        // }
        return response
    },
    error => {
        /***** 接收到异常响应的处理开始 *****/
        if (error && error.response) {
            // 1.公共错误处理
            // 2.根据响应码具体处理
            switch (error.response.status) {
                case 400:
                    error.message = '错误请求'
                    break;
                // 401: 未登录    
                // 未登录则跳转登录页面，并携带当前页面的路径    
                // 在登录成功后返回当前页面，这一步需要在登录页操作。
                case 401:
                    error.message = '未授权，请重新登录'
                    router.replace({
                        path: '/', // 登录页     
                        query: { 
                            // redirect: router.currentRoute.fullPath
                         }
                    });
                    break;
                case 403:
                    error.message = '登录过期，请重新登录'
                    // 清除token     
                    localStorage.removeItem('token');
                    // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                    setTimeout(() => {
                        router.replace({
                            path: '/',
                            query: {
                                // redirect: router.currentRoute.fullPath
                            }
                        });
                    }, 1000);
                    break;
                case 404:
                    error.message = '请求错误,未找到该资源'
                    // window.location.href = "/NotFound"
                    break;
                case 405:
                    error.message = '请求方法不允许'
                    break;
                case 408:
                    error.message = '请求超时'
                    break;
                case 500:
                    error.message = '服务器端出错'
                    break;
                case 501:
                    error.message = '网络未实现'
                    break;
                case 502:
                    error.message = '网络错误'
                    break;
                case 503:
                    error.message = '服务不可用'
                    break;
                case 504:
                    error.message = '网络超时'
                    break;
                case 505:
                    error.message = 'http版本不支持该请求'
                    break;
                default:
                    error.message = `连接错误${error.response.status}`
            }
        } else {
            // 超时处理
            if (JSON.stringify(error).includes('timeout')) {
                // error('服务器响应超时，请刷新当前页')
                Message_Box.MessageError('服务器响应超时，请刷新当前页')
            }
            Message_Box.MessageError('连接服务器失败')
        }
        // Message.error(error.message)
        console.log(error.message, 'heeder-94错误');
        Message_Box.MessageError(error.message)
        /***** 处理结束 *****/
        return Promise.resolve(error.response)
    }
)

export default instance


